<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Vue2.X响应式原理</title>
</head>
<body>
  <div id="app"></div>
  <script>
    // 模拟Vue中的data选项
    let data = {
      name: 'Tom',
      age: 18,
    }
    // 模拟Vue的实例
    let vm = {}
    // 通过Object.defineProperty()方法实现响应式
    // 数据劫持：当访问或者设置vm中的成员时，做一些操作
    Object.keys(data).forEach(key => {
      Object.defineProperty(vm, key, {
        // 当获取值的时候执行
        get() {
          console.log('get:' + data[key]);
          return data[key]
        },
        // 当设置值的时候执行
        set(newValue) {
          if (newValue === data[key]) {
            return
          }
          data[key] = newValue
          console.log('set:' + data[key]);
          // 数据更改时更新DOM的值
          document.querySelector('#app').textContent += data[key]
        }
      })
    })

    vm.name = 'Lily'
    vm.age = 20
    console.log(vm.name);
  </script>
</body>
</html>